package com.jdy.singleton.serializable;

import java.io.Serializable;

/**
 * 饿汉式 防止序列化破坏单例
 * <p>
 *
 * 懒汉式序列化破坏单例模式
 *
 * 缺点，类加载时就创建实例，浪费空间
 */
public class SerializableSingleton implements Serializable {

    /**
     * 类加载时创建初始化
     */
    private static final SerializableSingleton INSTANCE = new SerializableSingleton();

    /**
     * 私有化构造方法
     */
    private SerializableSingleton() {
    }

    /**
     * 提供全局访问点
     *
     * @return 单例对象
     */
    public static SerializableSingleton getInstance() {
        return INSTANCE;
    }


    /**
     * 防止破坏单例模式，需新增此方法
     * <p>
     * 新增readResolve，是为了覆盖反序列化出来的对象
     * 整个单例过程中创建了两次，发生在JVM层面，相对来说比较安全
     * 之前反序列化的对象会被GC回收掉
     *
     * @return 单例对象
     */
    private Object readResolve() {
        return INSTANCE;
    }
}
